package modelo;

import java.awt.Point;
import java.awt.event.KeyEvent;
import java.util.concurrent.CopyOnWriteArrayList;

public class ControladorBombita implements KeyObservator{

	private Bombita bombita;
	private Mapa mapa;
	private CopyOnWriteArrayList<Contenido> objetosVivos;
	
	public ControladorBombita(Bombita bombita, Mapa mapa, CopyOnWriteArrayList<Contenido> objetosVivos){
		this.bombita = bombita;
		this.mapa = mapa;
		this.objetosVivos = objetosVivos;
		
	}
	
	public boolean puedeMoverseA(Point posicion){
		if (!this.mapa.posicionValida(posicion)){
			return false;
		}
		
		return this.bombita.casilleroValido(this.mapa.obtenerCasillero(posicion));
	}
	
	public void mover(Point posicion){
		if(this.puedeMoverseA(posicion)){
			if(this.bombita.getTicksEspera() <= 0){
				this.bombita.reiniciarTicksEspera();
				this.mapa.cambiarPosicionContenido(this.bombita, posicion);
				if(this.mapa.obtenerCasillero(posicion).esSalida()){
					this.bombita.encontroSalida(true);
				}
			}
			else{
				this.bombita.disminuirEspera();
			}
		}
	}
	
	public void moverIzquierda(){
		Point posActual = this.bombita.getPosicion();
		Point posIzq = new Point((int)posActual.getX()-1,(int)posActual.getY());
		
		this.mover(posIzq);
	}
	
	public void moverDerecha(){
		Point posActual = this.bombita.getPosicion();
		Point posDer = new Point((int)posActual.getX()+1,(int)posActual.getY());
		
		this.mover(posDer);
	}
	
	public void moverArriba(){
		Point posActual = this.bombita.getPosicion();
		Point posArr = new Point((int)posActual.getX(),(int)posActual.getY()-1);
		
		this.mover(posArr);
	}
	
	public void moverAbajo(){
		Point posActual = this.bombita.getPosicion();
		Point posAbajo = new Point((int)posActual.getX(),(int)posActual.getY()+1);
		
		this.mover(posAbajo);
	}
	
	public void ponerBomba(){
		Point posBombita = this.bombita.getPosicion();
		Arma arma = this.bombita.obtenerArma();
	
		arma.setPosicion(posBombita);
		arma.setDestino(posBombita);
		objetosVivos.add(arma);	
		
	}
	
	public void keyTyped(int codigo){
		if(codigo == KeyEvent.VK_SPACE){
			this.ponerBomba();
		}
		
		else if(codigo == KeyEvent.VK_LEFT){
			this.moverIzquierda();
		}
		
		else if(codigo == KeyEvent.VK_RIGHT){
			this.moverDerecha();
		}
		
		else if(codigo == KeyEvent.VK_UP){
			this.moverArriba();
		}
		
		else if (codigo == KeyEvent.VK_DOWN){
			this.moverAbajo();
		}
	}
	
	
}
